export default {
  created() {
    this.createFn && this.createFn();

    if (this.pageName) { // 列表页传入 pageName，一进入页面获取缓存页面页数，调用一次列表接口，清除页面缓存页数
      this.index = this.$store.getters.pages[this.pageName] || this.index;
      this.getPagingList();
      this.$store.commit('layout/removePages', this.pageName);
    }
  },
  data() {
    return {
      pageName: '', // 对应页面的组件名
      searchKey: {}, // 分页列表搜索参数
      index: 1, // 当前页数
      size: 10, // 每页多少条数据
      totalSize: 0, // 列表总条数
      pagingList: [], // 分页列表数据
      delMessage: { // 分页列表删除按钮配置
        msg: '确定删除吗？',
        title: '删除确认',
        options: {}
      }
    };
  },
  methods: {
    getPagingList(i) { // 获取分页列表数据
      this.index = i || this.index;
      this.listFn && this.listFn({ // listFn 为分页列表接口，必须在页面配置
        params: {
          index: this.index,
          size: this.size,
          ...this.searchKey
        }
      }).then(res => {
        if (res.code == 200) {
          // console.log(res.data);
          this.listFnCallback && this.listFnCallback(res.data.list);
          this.pagingList = res.data.list;
          this.totalSize = res.data.totalSize;
        }
      });
    },
    handlePagination({ page, limit }) { // 处理分页组件的 页数改变、条数改变 事件
      this.index = page;
      this.size = limit;
      this.getPagingList();
    },
    changeState(row, key = 'stateObj') { // 状态开关的改变事件
      this.stateFn(row.id, { // stateFn 为修改状态接口，若使用开关则必须在页面配置
        data: {
          stateId: row[key].id,
        }
      }).then(res => {
        if (res.code != 200) {
          row[key].id = row[key].id == 1 ? 2 : 1;
        }
      });
    },
    del(row, i, callback, options = {}) { // 分页列表删除按钮的事件
      callback && callback(options); // 分页列表删除按钮回调，修改 options.close 为 true，可以不执行删除函数，用于禁用按钮，防止用户手动删除 disabled 属性
      if (options.close) {
        return;
      }
      this.$confirm(this.delMessage.msg, this.delMessage.title, {
        type: 'warning',
        ...this.delMessage.options
      }).then(() => {
        this.delFn(row.id).then(res => { // delFn 为删除分页列表当条数据的接口，若使用删除按钮则必须在页面配置
          if (res.code == 200) {
            if (this.pagingList.length == 1) {
              this.getPagingList(this.index - 1);
            } else {
              this.getPagingList();
            }
            this.deleteCallback && this.deleteCallback(row);
          }
        });
      }).catch(() => {});
    }
  },
  components: {
    Pagination: () => import('@c/Pagination.vue')
  }
};
